{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Numpy实现多项式曲线拟合"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "问题定义：  \n",
    "对于一堆数据点(x, y)，能否只根据这些数据，找出一个函数，使得函数画出来的曲线和原始数据曲线尽量匹配？\n",
    "\n",
    "多项式拟合问题：   \n",
    "任何可微连续的函数，都可以用一个N次多项式来估计，而比N次幂更高阶的部分为无穷小可以忽略不计\n",
    "\n",
    "3次多项式即：ax^3 + bx^2 + cx + d  \n",
    "比如我们可以让sin(x) 约等于 ax^3 + bx^2 + cx + d"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1. 构造原始数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "# x是一个数组，在-5~5，等间距生成的50个点\n",
    "x = np.linspace(-5, 5, 50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "# 假造y，为sin(x)，同时加上一些噪声，模拟真实世界的数据\n",
    "y = np.sin(x) + np.random.rand(50)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "((50,), (50,))"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 4
    }
   ],
   "source": [
    "x.shape, y.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "<matplotlib.collections.PathCollection at 0x20516917a20>"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 5
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x, y)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2. 使用Numpy拟合"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "# 使用三次方多项式做拟合\n",
    "# 10表示最高次方（拟合参数）\n",
    "params = np.polyfit(x, y, 10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "array([ 2.62552759e-06,  7.23616602e-07, -1.44671560e-04, -1.33602085e-04,\n        2.59741717e-03,  7.58096088e-03, -1.46378353e-02, -1.69017132e-01,\n       -3.11625031e-03,  1.08190034e+00,  4.92712927e-01])"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 7
    }
   ],
   "source": [
    "params"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "poly1d([ 2.62552759e-06,  7.23616602e-07, -1.44671560e-04, -1.33602085e-04,\n        2.59741717e-03,  7.58096088e-03, -1.46378353e-02, -1.69017132e-01,\n       -3.11625031e-03,  1.08190034e+00,  4.92712927e-01])"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 8
    }
   ],
   "source": [
    "# 构造一个便捷多项式对象\n",
    "param_func = np.poly1d(params)\n",
    "param_func"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": [
    "# 根据原始的x，计算拟合的y_predict\n",
    "y_predict = param_func(x)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": "[<matplotlib.lines.Line2D at 0x205161d7da0>]"
     },
     "metadata": {},
     "output_type": "execute_result",
     "execution_count": 10
    },
    {
     "data": {
      "text/plain": "<Figure size 432x288 with 1 Axes>",
      "image/png": "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\n"
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(x, y)\n",
    "plt.plot(x, y_predict)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "is_executing": false
    }
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "source": [],
    "metadata": {
     "collapsed": false
    }
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}